\section{4. Patterns 2: GoF Observer}

\begin{center}
\line(1,0){500}
\end{center}

\begin{itemize}
\item Redegør for, hvad et software design pattern er. 
\item Redegør for opbygningen af GoF Observer. 
\item Sammenlign de forskellige varianter af GoF Observer – hvilken vil du anvende hvornår?
\item Redegør for, hvordan anvendelsen af GoF Observer fremmer godt software design 
\item Redegør for fordele og ulemper ved anvendelsen af GoF Observer 
\item Redegør for, hvilke(t) SOLID-princip(per) du mener anvendelsen af GoF Observer understøtter 
\end{itemize}
\begin{center}
\line(1,0){500}
\end{center}

\subsubsection{Hvad er et SW Design Pattern}
\begin{itemize}
    \item Et løsnings-forslag til et almindeligt opstående problem
    \item En template
    \item En form for formel "best practice"
\end{itemize}
\subsubsection{GOF Observer}
\begin{itemize}
    \item Løsning til Provider / Consumer kommunikation
    \begin{itemize}
        \item Provider skal ikke kende alle sine Consumers
        \item Consumer skal ikke benytte polling af Provider
        \item Der skal kunne tilføjes Consumers til Provider uden at denne ændres       
    \end{itemize}
     	\item Der findes forskellige varianter
     	\item Hjælper med at overholde OCP
     	\item LSP overholdes i selve mønstret
\end{itemize}
\subsubsection{Varianter af Observer}
\begin{itemize}
    \item Push og Pull - Henter Observeren selv sine data eller bliver de sendt til den
    \item Push - Forskellige metoder for Provideren til identifikation
    \begin{itemize}
        \item *this
        \item string ID
        \item Generics til forskellige typer af subjects
    \end{itemize}
\end{itemize}
\subsubsection{Godt SW Design}
\begin{itemize}
    \item Kobling mindskes
\end{itemize}
\subsubsection{Fordele og Ulemper ved Observer}
\begin{itemize}
    \item Overbrug af mønstret kan lede til kode der er svær at overskue
    \begin{itemize}
    	\item Lange sekvensdiagrammer
    \end{itemize}
\end{itemize}
\subsubsection{Hvilke SOLID principper understøttes}
\begin{itemize}
    \item OCP - Det er ikke nødvendigt at ændre Subject for at tilføje observers
    \item LSP - Subject kan erstattes af specialiseringer
    \item ISP - Til dels %TODO
    \item DIP - Observer er abstrakt, og afledte klasser af afhængig af den. Subject afhænger også af Observer
\end{itemize}